package com.rrd.dw.mr.gzip.kafka;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ucredit.babel.common.model.BaseModel;
import com.ucredit.babel.common.model.RecordType;
import com.ucredit.babel.common.model.third.ypcredit.YpcreditRecord;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper.Context;

import java.io.IOException;

/**
 * 天创信用接口
 *
 * @author renzhanzheng
 */

public class YpcreditParse extends ParseBase {

    private Text val = new Text();
    private Text key = new Text();

    /**
     * 天创信用接口
     *
     * @param model
     * @throws IOException
     * @throws InterruptedException
     * @return
     */
    @Override
    public boolean parseJob(Context context, BaseModel<?> model, String successful) throws IOException, InterruptedException {

        YpcreditRecord obj = (YpcreditRecord) model;
        JSONObject info = obj.getData() == null ? new JSONObject() : JSON.parseObject(obj.getData());
        JSONObject result = info.getJSONObject("result") == null ? new JSONObject() : info.getJSONObject("result");

        StringBuilder sb = getBaseInfo(obj, successful);

        //贷款总机构数
        sb.append(result.getString("CPL0001")).append(CRT001);
        //贷款已结清机构数
        sb.append(result.getString("CPL0002")).append(CRT001);
        //消费金融类机构数
        sb.append(result.getString("CPL0007")).append(CRT001);
        //网络贷款类机构数
        sb.append(result.getString("CPL0008")).append(CRT001);
        //最近1天贷款机构数
        sb.append(result.getString("CPL0070")).append(CRT001);
        //最近7天贷款机构数
        sb.append(result.getString("CPL0009")).append(CRT001);
        //最近14贷款机构数
        sb.append(result.getString("CPL0010")).append(CRT001);
        //最近21天贷款机构数
        sb.append(result.getString("CPL0063")).append(CRT001);
        //最近30天贷款机构数
        sb.append(result.getString("CPL0011")).append(CRT001);
        //最近90天贷款机构数
        sb.append(result.getString("CPL0012")).append(CRT001);
        //最近180天贷款机构数
        sb.append(result.getString("CPL0013")).append(CRT001);
        //历史贷款机构成功还款笔数
        sb.append(result.getString("CPL0014")).append(CRT001);
        //历史贷款机构交易失败笔数
        sb.append(result.getString("CPL0015")).append(CRT001);
        //最近1天交易失败笔数
        sb.append(result.getString("CPL0016")).append(CRT001);
        //最近1天还款成功笔数
        sb.append(result.getString("CPL0017")).append(CRT001);
        //最近7天交易失败笔数
        sb.append(result.getString("CPL0018")).append(CRT001);
        //最近7天还款成功笔数
        sb.append(result.getString("CPL0019")).append(CRT001);
        //最近14天交易失败笔数
        sb.append(result.getString("CPL0020")).append(CRT001);
        //最近14天还款成功笔数
        sb.append(result.getString("CPL0021")).append(CRT001);
        //最近21天还款成功笔数
        sb.append(result.getString("CPL0064")).append(CRT001);
        //最近21交易失败笔数
        sb.append(result.getString("CPL0065")).append(CRT001);
        //最近30天交易失败笔数
        sb.append(result.getString("CPL0022")).append(CRT001);
        //最近30天还款成功笔数
        sb.append(result.getString("CPL0023")).append(CRT001);
        //最近90天交易失败笔数
        sb.append(result.getString("CPL0024")).append(CRT001);
        //最近90天还款成功笔数
        sb.append(result.getString("CPL0025")).append(CRT001);
        //最近180天交易失败笔数
        sb.append(result.getString("CPL0026")).append(CRT001);
        //最近180天还款成功笔数
        sb.append(result.getString("CPL0027")).append(CRT001);
        //当前是否逾期\1-逾期\0-未逾期
        sb.append(result.getString("CPL0044")).append(CRT001);
        //最近7天_交易失败次数>0的机构数
        sb.append(result.getString("CPL0048")).append(CRT001);
        //最近14天_交易失败次数>0的机构数
        sb.append(result.getString("CPL0049")).append(CRT001);
        //最近21天_交易失败次数>0的机构数
        sb.append(result.getString("CPL0050")).append(CRT001);
        //最近30天_交易失败次数>0的机构数
        sb.append(result.getString("CPL0051")).append(CRT001);
        //当前逾期机构数
        sb.append(result.getString("CPL0071")).append(CRT001);
        //当前逾期金额
        sb.append(result.getString("CPL0072")).append(CRT001);
        //近90天内还款成功总金额/近90天还款总金额
        sb.append(result.getString("CPL0079")).append(CRT001);
        //近90天内还款成功笔数/近90天内还款总笔数近90天内还款成功笔数/近90天内还款总笔数
        sb.append(result.getString("CPL0080")).append(CRT001);
        //信用贷款时长\单位\天
        sb.append(result.getString("CPL0045")).append(CRT001);
        //最近一次交易距离当前时间\单位\天
        sb.append(result.getString("CPL0046")).append(CRT001);
        //最近一次还款成功距离当前天数
        sb.append(result.getString("CPL0068")).append(CRT001);
        //近1天内还款成功笔数/近1天内还款总笔数
        sb.append(result.getString("CPL0085")).append(CRT001);
        //近7天内还款成功笔数/近7天内还款总笔数
        sb.append(result.getString("CPL0086")).append(CRT001);
        //近14天内还款成功笔数/近14天内还款总笔数
        sb.append(result.getString("CPL0087")).append(CRT001);
        //近30天内还款成功笔数/近30天内还款总笔数
        sb.append(result.getString("CPL0088")).append(CRT001);
        //近180天内还款成功笔数/近180天内还款总笔数
        sb.append(result.getString("CPL0089")).append(CRT001);
        //历史还款成功笔数/历史还款总笔数
        sb.append(result.getString("CPL0090")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0081")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0091")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0092")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0093")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0094")).append(CRT001);
        //预留字段
        sb.append(result.getString("CPL0095")).append(CRT001);
        //最近1天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0032")).append(CRT001);
        //最近1天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0033")).append(CRT001);
        //最近7天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0034")).append(CRT001);
        //最近7天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0035")).append(CRT001);
        //最近14天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0036")).append(CRT001);
        //最近14天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0037")).append(CRT001);
        //最近21天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0066")).append(CRT001);
        //最近21天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0067")).append(CRT001);
        //最近30天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0038")).append(CRT001);
        //最近30天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0039")).append(CRT001);
        //最近90天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0040")).append(CRT001);
        //最近90天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0041")).append(CRT001);
        //最近180天交易失败总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0042")).append(CRT001);
        //最近180天还款成功总金额\金额为模糊化处理后结果\每单位金额对应200元人民币
        sb.append(result.getString("CPL0043")).append(CRT001);
        //收费状态码\1-收费\0-不收费
        sb.append(result.getString("fee_status")).append(CRT001);

        key.set(getKey());
        val.set(sb.toString().replace("\n", " ").replace("\r", " "));
        context.write(key, val);


        return true;
    }

    @Override
    public String getTableName() {
        return "kafka_babel_tianchuang_credit_inc";
    }

    @Override
    public String getType() {
        return RecordType.YP_CREDIT_RECORD.toString();
    }

    @Override
    public String getComment() {
        return "天创信用接口";
    }
}
